「起動設定を使ったAuto Scalingグループ」を作らせないIAMポリシー(SCP)
はじめに
Auto Scaling、起動設定、起動テンプレートとは
Amazon EC2 Auto Scaling は EC2インスタンスの水平スケールを実現するサービスです。 「Auto Scaling グループ」 を作成して「EC2インスタンスの集合」を管理できます。 グループ内のインスタンスの最大数や最小数を指定できます。 また、特定の条件下でインスタンスを増減させる「スケーリングポリシー」を設定できます。 アプリケーションの負荷に応じた水平スケールを実現できます。
Auto Scaling を使用するためには「どのようなインスタンスを起動するか」の設定が必要です。 例えば 使用するAMI IDや インスタンスタイプ、セキュリティグループなどです。 この設定には 「 起動テンプレート 」もしくは「 起動設定 」が使用できます。
起動設定は「非推奨」
現在は 起動テンプレートを使うことが推奨されており 、
起動設定は非推奨 になっています。
起動設定は昔からあった設定で、機能が少ないためです。
AWS公式ドキュメント にも 「起動設定を使用しないことを強くお勧めします」
と明記されています。
予防的ガードレールを作りたい
そのため、これから作っていくワークロードには起動設定は使わせたくありません。
予防的に「起動設定を使わせない」ようにするには IAMポリシーが適しています。 例えば、利用者のユーザーポリシーを定めて、「起動設定を使う」アクションを禁止します。 また、SCP(サービスコントロールポリシー)を使って、アカウント単位で そのアクションを禁止します。
以降で「起動設定を使わせない」ためのIAMポリシー例を紹介します。
「起動設定を使ったAuto Scalingグループ」を作らせないIAMポリシー
以下のような IAMポリシーを作ってみました。 2つのステートメントを順番に説明します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyCreateLaunchConfiguration", "Effect": "Deny", "Action": "autoscaling:CreateLaunchConfiguration", "Resource": "*" }, { "Sid": "DenyUseLaunchConfiguration", "Effect": "Deny", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup" ], "Resource": "*", "Condition": { "Null": { "autoscaling:LaunchConfigurationName": false } } } ] }
DenyCreateLaunchConfiguration
"Sid": "DenyCreateLaunchConfiguration", "Effect": "Deny", "Action": "autoscaling:CreateLaunchConfiguration", "Resource": "*"
そのままです。「起動設定の作成」を禁止します。
新規アカウントで、他に起動設定リソースが無いような環境であれば、
このステートメントだけで十分です。
DenyUseLaunchConfiguration
"Sid": "DenyUseLaunchConfiguration", "Effect": "Deny", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup" ], "Resource": "*", "Condition": { "Null": { "autoscaling:LaunchConfigurationName": false } }
このステートメントで「起動設定を使わせる」ことを禁止します。 例えば「Auto Scaling グループの設定を 起動テンプレートから起動設定 に変更する」 ことを禁止できます。
試してみる
起動設定を新規作成
起動設定の作成を試みます。
拒否されました。
Auto Scalingグループの設定変更
既存の Auto Scalingグループの設定を「起動テンプレート」から 「起動設定」に変えてみます。
こちらも拒否されました。
おわりに
以上 「Auto Scaling グループで起動設定を使わせない」ための予防ガードレール例でした。 SCPや IAM Permissions Boundary などで設定しておくと良いでしょう。